package com.cougil.uoc.seghismed.business;

import java.util.List;

import com.cougil.uoc.seghismed.model.Metge;
import com.cougil.uoc.seghismed.model.ciphed.MetgeCiphed;
import com.cougil.uoc.seghismed.model.ciphed.PacientCiphed;

/**
 * Interface que defineix els mètodes oferts a les peticions rebudes a través dels aplicatius dels
 * Metges. També disposa de la lògica vinculada amb la gestió de la informació relacionada amb els
 * Metges (ex: grabar, esborrar i cercar Metges i les seves dades relacionades)
 * 
 * @author Ignacio Cougil Jares
 */
public interface MetgeService extends CoreServerService {

	/**
	 * Consulta i retorna les dades del metge i les xifra només per a si mateix
	 *
	 * @param metge
	 *            {@link MetgeCiphed} xifrat del que es preten obtenir la seva informació
	 * @return metge xifrat {@link MetgeCiphed} només per al metge informat o null en cas que no es
	 *         pugui trobar
	 */
	public MetgeCiphed consultarMetge(MetgeCiphed metge);

	/**
	 * Retorna la llista de pacients xifrats que el metge té associats
	 *
	 * @param metgeCiphed
	 *            {@link MetgeCiphed} metge xifrat del que es vol obtenir la llista de pacients
	 *            xifrats que té associats
	 * @return llista {@link List} dels pacients xifrats trobats per al metge referit
	 */
	public List<PacientCiphed> consultarPacients(MetgeCiphed metgeCiphed);

	/**
	 * Cerca el metge que tingui el DNI informat
	 * @param dni DNI del metge que es preten cercar
	 * @return metge {@link Metge} trobat
	 */
	public Metge findByDni(String dni);

	/**
	 * Cerca el metge que tingui l'identificador informat
	 * @param id Identificador del metge que es preten cercar
	 * @return pacient {@link Metge} trobat
	 */
	public Metge findById (Integer id);

	/**
	 * Cerca l'últim metge xifrat disponible en el sistema
	 *
	 * @return metge xifrat {@link MetgeCiphed} trobat
	 */
	public MetgeCiphed findLastMetgeCiphed();

	/**
	 * Retorna el metge xifrat associat al metge
	 * @param metge {@link Metge} del que es preten cercar el seu metge xifrat
	 * @return metge xifrat trobat {@link MetgeCiphed} o null en cas contrari
	 */
	public MetgeCiphed findMetgeCiphed(Metge metge);

	/**
	 * Retorna la llista de tots els metges disponibles en el sistema
	 * @return {@link List} llista amb el conjunt d'elements trobats
	 */
	public List<Metge> findMetges();

	/**
	 * Retorna la llista amb tots els metges xifrats disponibles en el sistema
	 * @return {@link List} llista amb el conjunt d'elements trobats
	 */
	public List<MetgeCiphed> findMetgesCiphed();

	/**
	 * Esborra un metge informat per paràmetre
	 * @param id Identificador del metge que es preten esborrar
	 */
	public void remove(Integer id);

	/**
	 * Esborra tots els metges existents en el sistema
	 * @return nombre de metges esborrats
	 */
	public int removeAll();

	/**
	 * Emmagatzema un metge informat per paràmetre
	 * @param metge {@link Metge} que es preten guardar
	 */
	public void save(Metge metge);

	/**
	 * Retorna el nombre de metges disponibles en el sistema
	 *
	 * @return nombre d'elements trobats
	 */
	public long totalMetges();

	/**
	 * Retorna el nombre de metges xifrats disponibles en el sistema
	 *
	 * @return nombre d'elements trobats
	 */
	public long totalMetgesCiphed();



}






